home *** CD-ROM | disk | FTP | other *** search
- /*
- * List operations for ToolAlias.
- *
- * mws, 4 February 1993
- */
- #include <exec/memory.h>
- #include <proto/exec.h>
- #include <string.h>
- #include "list.h"
-
- static TOOL *head; /* empty */
-
- void
- free_tool(TOOL *tool)
- {
- if (tool->oldname) FreeVec(tool->oldname);
- if (tool->newname) FreeVec(tool->newname);
- FreeVec(tool);
- }
-
- /* get head of list */
- TOOL *
- get_head()
- {
- return head;
- }
-
- /* get tail of list */
- TOOL *
- get_tail()
- {
- TOOL *tool = head;
-
- while (tool && tool->next)
- tool = tool->next;
- return tool;
- }
-
- /* add a new entry after given position in list, returning new entry/NULL if failure */
- TOOL *
- add_tool(TOOL *curtool)
- {
- TOOL *newtool;
-
- Forbid();
- if (newtool = AllocVec(sizeof(TOOL), MEMF_CLEAR|MEMF_PUBLIC))
- {
- if (curtool) /* list non-empty */
- {
- newtool->prev = curtool;
- newtool->next = curtool->next;
- if (curtool->next)
- curtool->next->prev = newtool;
- curtool->next = newtool;
- }
- else /* empty list - initialize */
- {
- head = newtool;
- }
- }
- Permit();
- return newtool;
- }
-
- /* remove current entry, return prev if exists, else next */
- TOOL *
- rem_tool(TOOL *tool)
- {
- TOOL *curtool;
-
- Forbid();
- if (tool->prev)
- tool->prev->next = tool->next;
- else
- /* first tool in list - change head */
- head = tool->next;
-
- if (tool->next)
- tool->next->prev = tool->prev;
-
- /* determine current tool after deletion */
- curtool = tool->prev ? tool->prev : tool->next;
-
- free_tool(tool);
- Permit();
- return curtool;
- }
-
- /* set/update oldname in tool entry - returns success/failure */
- BOOL
- set_oldname(TOOL *tool, char *oldname)
- {
- char *name;
-
- if (name = AllocVec(strlen(oldname)+1, MEMF_PUBLIC|MEMF_CLEAR))
- {
- Forbid();
- if (tool->oldname)
- FreeVec(tool->oldname);
- strcpy(name, oldname);
- tool->oldname = name;
- Permit();
- return TRUE;
- }
- return FALSE;
- }
-
- /* set/update newname in tool entry - returns success/failure */
- BOOL
- set_newname(TOOL *tool, char *newname)
- {
- char *name;
-
- if (name = AllocVec(strlen(newname)+1, MEMF_PUBLIC|MEMF_CLEAR))
- {
- Forbid();
- if (tool->newname)
- FreeVec(tool->newname);
- strcpy(name, newname);
- tool->newname = name;
- Permit();
- return TRUE;
- }
- return FALSE;
- }
-
- /* look-up oldname in list, return newname or NULL if not found */
- char *
- find_tool(char *name)
- {
- TOOL *tool;
-
- Forbid();
- tool = head;
- while (tool)
- {
- if (tool->oldname && *tool->oldname) /* non-null */
- if (!stricmp(name, tool->oldname)) /* case-insensitive */
- {
- Permit();
- return tool->newname;
- }
- tool = tool->next;
- }
- Permit();
- return NULL;
- }
-
- /* remove whole list from memory */
- void
- free_list()
- {
- TOOL *tool, *next;
-
- Forbid();
- tool = head;
- while (tool)
- {
- next = tool->next;
- free_tool(tool);
- tool = next;
- }
- head = NULL;
- Permit();
- }